Fuente: https://gitlab.com/LibreOfficiant/scriptforge/-/snippets/4871127
Autor original: Jean-Pierre Ledure
Artículo relacionado: LibreOffice Base y Firebird, una relación especial
En este artículo hablaré del modelo dividido de una base de datos que se usa en los ejemplos de ScriptForge en la wiki de LibreOffice. ScriptForge es un entorno muy amigable y sencillo para iniciarse en la programación de macros y scripts, con los cuales es posible ampliar el poder y flexibilidad de LibreOffice gracias a algún lenguaje de programación, como Python o LibreOffice Basic. Para ilustrar las ventajas que ScriptForge ofrece para el desarrollo de aplicaciones Base, la wiki de LibreOffice presenta ejemplos basados en la misma estructura de base de datos, con datos separados de la base de datos, como el ejemplo de muestra que trae consigo Firebird.
Firebird es el motor de base de datos predeterminado que usa LibreOffice en las versiones más recientes de la suite ofimática. Una de las ventajas de este motor es que cuenta con un ecosistema muy amplio de herramientas adicionales para consultar, mantener, reparar, realizar copias de seguridad y administrar bases de datos. Las bases de datos externas (archivos .fdb) son directamente accesibles con estas herramientas, sin limitaciones. Las bases de datos integradas solo se pueden acceder a través de la interfaz Base de LibreOffice.
Los ejemplos de ScriptForge en la wiki de LibO usan la base de datos que viene de ejemplo con la instalación externa de Firebird. Muchos tutoriales públicos sobre el uso de Firebird se basan en esta base de datos, llamada employee.fdb. Para descargar la base de datos mencionada, visite este enlace (no es necesario tener una cuenta en GitLab, donde está alojada para su comodidad): employee.fdb.
Lo que resulta específico y más inusual en nuestro caso es que los ejemplos de bases de datos propuestos en la wiki sobre ScriptForge NO ESTÁN INCORPORADOS en un único archivo Base (.odb). Aplicamos el modelo denominado dividido, donde los datos se ubican fuera del archivo Base (.odb) que accede a ellos. El archivo Base contiene únicamente las consultas, los formularios, los informes y las macros que especifican cómo se accede a los datos o se actualizan, pero no las tablas.
En resumen, se necesitan dos archivos (en lugar de uno solo, como en el modelo integrado o embebido, que normalmente usa el motor de base de datos HSQLDB) y una cadena de conexión:
- El archivo .odb contiene las consultas, formularios, informes y macros (archivo 1).
- El archivo .fdb contiene las tablas (archivo 2).
- La URL de la ubicación del archivo 2 se almacena como cadena de conexión en el archivo 1.
¿Qué ventajas tiene el modelo dividido de una base de datos en Base?
- Como ya comenté arriba, el ecosistema de Firebird es amplio y multiplataforma.
- Seguridad y sencillez. La introducción o actualización de nuevas funciones en su aplicación Base es mucho más sencilla y segura. Los cambios en formularios, consultas, macros, etc., se pueden probar y ajustar en una copia de los datos reales (base de datos de prueba) sin riesgo de corrupción en la base de datos de producción. La actualización de su aplicación a una versión nueva, más estable o con más funciones, cuidadosamente probada con datos de prueba, es inmediata. Además, puede ejecutar la aplicación real mientras diseña una actualización.
- Multiusuarios. Normalmente, una base de datos dividida es una base de datos de un solo usuario. Sin embargo, está preparada para ser utilizada por varios usuarios simultáneamente. Esto requiere la ejecución de un servidor de base de datos. Configurar el archivo Base (.odb) para que acceda al servidor directamente desde el archivo .fdb permite acceder a los datos a través del servidor, sin la necesidad de modificar la aplicación.
Conclusión: dividir su base de datos es, en realidad, prepararse para el futuro.
¿Cómo crear una base de datos dividida?
- Ejecute el Asistente de bases de datos con la opción Archivo > Nuevo > Base de datos.
Seleccione Conectar a una base de datos existente. - Seleccione el controlador externo Firebird.
En la siguiente página, pulse Crear nuevo. - Para conectarse a una base de datos existente, seleccione Examinar…
Deberá especificar dos ubicaciones, una para cada archivo del par mencionado arriba.
¿Cómo crear una base de datos dividida a partir de un archivo con base de datos embebida?
En mi opinión, la mejor referencia se encuentra en las respuestas dadas a la pregunta planteada en AskLibreOffice: https://ask.libreoffice.org/t/how-to-split-a-firebird-embedded-database/59840.
Contenido de la base de datos employees.fdb
La base de datos employee.fdb contiene 10 tablas y 1 vista, que describen:
- a los empleados de una compañía, agrupados por departamento
- a los empleados que están involucrados en proyectos
- las ventas que alcanzó cada representante



Las tablas completas están disponibles al descargar y abrir en LibreOffice el archivo Employees_Intro.odb y al actualizar la cadena de conexión mediante la opción Editar > Base de datos > Propiedades en Base. Después hay que hacer referencia a la ubicación del archivo employee.fdb. Puede usar las siguientes consultas para probar la base de datos:
SELECT "DEPARTMENT"."DEPT_NO", "DEPARTMENT"."DEPARTMENT", "MANAGERS"."FULL_NAME" "MANAGER", "EMPLOYEE"."LAST_NAME", "EMPLOYEE"."FIRST_NAME" FROM "DEPARTMENT" LEFT OUTER JOIN "EMPLOYEE" "MANAGERS" ON "DEPARTMENT"."MNGR_NO" = "MANAGERS"."EMP_NO", "EMPLOYEE" WHERE "EMPLOYEE"."DEPT_NO" = "DEPARTMENT"."DEPT_NO"
SELECT "PROJECT"."PROJ_ID", "PROJECT"."PROJ_NAME", "EMPLOYEE"."LAST_NAME", "EMPLOYEE"."FIRST_NAME", "EMPLOYEE"."EMP_NO" FROM "EMPLOYEE_PROJECT", "PROJECT", "EMPLOYEE" WHERE "EMPLOYEE_PROJECT"."PROJ_ID" = "PROJECT"."PROJ_ID" AND "EMPLOYEE_PROJECT"."EMP_NO" = "EMPLOYEE"."EMP_NO" AND "EMPLOYEE_PROJECT"."EMP_NO" = "EMPLOYEE_PROJECT"."EMP_NO"
SELECT "SALES"."SALES_REP", "EMPLOYEE"."FULL_NAME", "CUSTOMER"."CUSTOMER", "SALES"."ORDER_DATE", "SALES"."TOTAL_VALUE", "CUSTOMER"."CITY", "CUSTOMER"."COUNTRY" FROM "SALES", "EMPLOYEE", "CUSTOMER" WHERE "SALES"."SALES_REP" = "EMPLOYEE"."EMP_NO" AND "SALES"."CUST_NO" = "CUSTOMER"."CUST_NO" ORDER BY "EMPLOYEE"."FULL_NAME" ASC, "CUSTOMER"."CUSTOMER" ASC

